home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / mischards.lha / SourceCode / Plasma.s < prev    next >
Text File  |  1980-02-20  |  10KB  |  628 lines

  1.     Opt    c-
  2.     Section    "Plasma Code",Code_c
  3.  
  4. PlasmaColour    = $60000
  5. CopperList0    = $62000
  6. CopperList1    = $70000
  7. Lines    = 160
  8.  
  9.     IncDir    Df0:
  10.  
  11. Start    Movem.l    d0-d7/a0-a6,-(sp) 
  12.     Bsr    KillSys      
  13.     
  14.     Lea    CopperList0,a0 
  15.     Lea    HardWare,a6      
  16.     Move.l    a0,Cop1Lc(a6)      
  17.     Move.w    #$83c0,DMACon(a6)
  18.  
  19.     Lea    CopperList0,a0
  20.     Lea    CopperList1,a1
  21.     Move.l    #$1000200,(a0)+    
  22.     Move.l    #$1000200,(a1)+    
  23.     Move.l    #$4001fffe,d0    
  24.     Move.w    #199,d6
  25. SetColLoop1    Move.l    d0,(a0)+
  26.     Move.l    d0,(a1)+
  27.     Move.w    #44,d7
  28. SetColLoop2    Move.l    #$01800000,(a0)+
  29.     Move.l    #$01800000,(a1)+
  30.     Dbf    d7,SetColLoop2
  31.     Add.l    #$1000000,d0
  32.     Dbf    d6,SetColLoop1    
  33.     Move.l    #$fffffffe,(a0)+
  34.     Move.l    #$fffffffe,(a1)+
  35.  
  36.     Bsr    MakeColourTab
  37.  
  38. Loop    Bsr    VBL
  39.     Bsr    DoubleBuffer
  40.     Bsr    DoWobble
  41.     Bsr    DoPlasma
  42.     Btst    #6,$Bfe001    
  43.     Bne    Loop      
  44.         
  45.     Bsr    ReturnSys      
  46.     Movem.l    (sp)+,d0-d7/a0-a6 
  47.     Moveq    #0,d0      
  48.     Rts
  49.  
  50. DoubleBuffer    Lea    CopperPt(pc),a0
  51.     Move.l    0(a0),d0
  52.     Move.l    4(a0),d1
  53.     Move.l    d0,4(a0)
  54.     Move.l    d1,0(a0)
  55.     Move.l    d0,$Dff080
  56.     Rts
  57.  
  58. DoWobble    Move.l    WobbleSine0(pc),d0
  59.     Move.l    WobbleSine1(pc),d1
  60.     Move.l    WobbleSine2(pc),d2
  61.     Move.l    WobbleSine3(pc),d3
  62.     Lea    PlasmaSine(pc),a4
  63.     Lea    PlasmaSine+$100(pc),a5
  64.     Move.l    a4,d4
  65.     Move.l    a5,d5
  66.     Move.l    #$100,d7
  67.     Lea    WobbleSine0Pt(pc),a1
  68.     Lea    WobbleSine1Pt(pc),a2
  69.     Add.l    d0,(a1)
  70.     Cmp.l    (a1),d5
  71.     Bhi    FindSine1
  72.     Sub.l    d7,(a1)
  73.     Bra    FoundSine1
  74.  
  75. FindSine1    Cmp.l    (a1),d4
  76.     Bls    FoundSine1
  77.     Add.l    d7,(a1)
  78. FoundSine1    Add.l    d1,(a2)
  79.     Cmp.l    (a2),d5
  80.     Bhi    FindSine2
  81.     Sub.l    d7,(a2)
  82.     Bra    FoundSine2
  83.  
  84. FindSine2    Cmp.l    (a2),d4
  85.     Bls    FoundSine2
  86.     Add.l    d7,(a2)
  87. FoundSine2    Move.l    CopperPt(pc),a0
  88.     Add.l    #$5,a0
  89.     Move.l    WobbleSine0Pt(pc),a1
  90.     Move.l    WobbleSine1Pt(pc),a2
  91.     Lea    $100,a3
  92.     Move.w    #Lines-1,d0
  93.     Move.l    #$b8,d1
  94.     Moveq.l    #1,d4
  95.     Moveq.l    #0,d6
  96.     Moveq.l    #$1b,d7
  97. DoWobbleLoop    Add.l    d2,a1
  98.     Cmp.l    d5,a1
  99.     Bcs    EndWobTab
  100.     Sub.l    a3,a1
  101. EndWobTab    Add.l    d3,a2
  102.     Cmp.l    d5,a2
  103.     Bcs    SetWobble
  104.     Sub.l    a3,a2
  105. SetWobble    Move.b    (a1),d6
  106.     Add.b    (a2),d6
  107.     Lsr.b    d4,d6
  108.     Lsl.b    d4,d6
  109.     Add.b    d7,d6
  110.     Move.b    d6,(a0)
  111.     Add.l    d1,a0
  112.     Dbra    d0,DoWobbleLoop
  113.     Rts    
  114.  
  115. DoPlasma    Move.l    PlasmaSine0(pc),d0
  116.     Move.l    PlasmaSine1(pc),d4
  117.     Move.l    PlasmaSine2(pc),d1
  118.     Move.l    PlasmaSine3(pc),d5
  119.     Move.l    PlasmaSine4(pc),d2
  120.     Move.l    PlasmaSine5(pc),d6
  121.     Move.l    PlasmaSine6(pc),d3
  122.     Move.l    PlasmaSine7(pc),d7
  123.     Lea    PlasmaSine0Pt(pc),a0
  124.     Lea    PlasmaSine1Pt(pc),a1
  125.     Lea    PlasmaSine2Pt(pc),a2
  126.     Lea    PlasmaSine3Pt(pc),a3
  127.     Lea    PlasmaColour,a4
  128.     Lsl.l    #1,d0
  129.     Lsl.l    #1,d1
  130.     Lsl.l    #1,d2
  131.     Lsl.l    #1,d3
  132.     Lsl.l    #1,d4
  133.     Lsl.l    #1,d5
  134.     Lsl.l    #1,d6
  135.     Lsl.l    #1,d7
  136.     Add.l    d0,(a0)
  137.     Cmp.l    #PlasmaSine+$2040,(a0)
  138.     Bcs    GetRedSine
  139.     Sub.l    #$1f40,(a0)
  140.     Bra.s    GotRedSine
  141.  
  142. GetRedSine    Cmp.l    #PlasmaSine+$100,(a0)
  143.     Bcc    GotRedSine
  144.     Add.l    #$1f40,(a0)
  145. GotRedSine    Add.l    d1,(a1)
  146.     Cmp.l    #PlasmaSine+$2040,(a1)
  147.     Bcs    GetGreenSine
  148.     Sub.l    #$1f40,(a1)
  149.     Bra.s    GotGreenSine
  150.  
  151. GetGreenSine    Cmp.l    #PlasmaSine+$100,(a1)
  152.     Bcc    GotGreenSine
  153.     Add.l    #$1f40,(a1)
  154. GotGreenSine    Add.l    d2,(a2)
  155.     Cmp.l    #PlasmaSine+$2040,(a2)
  156.     Bcs    GetBlueSine
  157.     Sub.l    #$1f40,(a2)
  158.     Bra.s    GotBlueSine
  159.  
  160. GetBlueSine    Cmp.l    #PlasmaSine+$100,(a2)
  161.     Bcc    GotBlueSine
  162.     Add.l    #$1f40,(a2)
  163. GotBlueSine    Add.l    d3,(a3)
  164.     Cmp.l    #PlasmaSine+$2040,(a3)
  165.     Bcs    SinesFound
  166.     Sub.l    #$1f40,(a3)
  167.     Bra.s    SetNewSine
  168.  
  169. SinesFound    Cmp.l    #PlasmaSine+$100,(a3)
  170.     Bcc    SetNewSine
  171.     Add.l    #$1f40,(a3)
  172. SetNewSine    Move.l    (a0),a0
  173.     Move.l    (a1),a1
  174.     Move.l    (a2),a2
  175.     Move.l    (a3),a3
  176.     Move.l    CopperPt(pc),d2
  177.     Add.l    #$a,d2
  178.     Move.l    a4,d3
  179.     Bsr    WaitBlitter
  180.     Move.w    #6,$Dff064
  181.     Move.w    #6,$Dff062
  182.     Move.w    #6,$Dff060
  183.     Move.w    #$b6,$Dff066
  184.     Move.l    #-1,$Dff044
  185.     Move.w    #$ffe,$Dff040
  186.     Move.w    #0,$Dff042
  187.     Move.l    a6,-(sp)
  188.     Lea    XCount(pc),a6
  189.     Move.w    #0,(a6)
  190.     Move.l    (sp)+,a6
  191. CheckSine1    Add.l    d4,a0
  192.     Cmp.l    #PlasmaSine+$2040,a0
  193.     Bcs    CheckSine2
  194.     Sub.l    #$1f40,a0
  195. CheckSine2    Add.l    d5,a1
  196.     Cmp.l    #PlasmaSine+$2040,a1
  197.     Bcs    CheckSine3
  198.     Sub.l    #$1f40,a1
  199. CheckSine3    Add.l    d6,a2
  200.     Cmp.l    #PlasmaSine+$2040,a2
  201.     Bcs    CheckSine4
  202.     Sub.l    #$1f40,a2
  203. CheckSine4    Add.l    d7,a3
  204.     Cmp.l    #PlasmaSine+$2040,a3
  205.     Bcs    SetRGBBlit
  206.     Sub.l    #$1f40,a3
  207. SetRGBBlit    Moveq.l    #0,d0
  208.     Move.w    (a0),d0
  209.     Move.w    (a1),d1
  210.     Add.w    d1,d0
  211.     Lsr.w    #1,d0
  212.     Lsl.w    #3,d0
  213.     Move.l    d3,a4
  214.     Add.l    #2,d3
  215.     Add.l    d0,a4
  216.     Move.w    (a1),d0
  217.     Move.w    (a2),d1
  218.     Add.w    d1,d0
  219.     Lsr.w    #1,d0
  220.     Lsl.w    #3,d0
  221.     Move.l    d3,a5
  222.     Add.l    #2,d3
  223.     Add.l    d0,a5
  224.     Move.w    (a2),d0
  225.     Move.w    (a3),d1
  226.     Add.w    d1,d0
  227.     Lsr.w    #1,d0
  228.     Lsl.w    #3,d0
  229.     Move.l    d3,a6
  230.     Add.l    #2,d3
  231.     Add.l    d0,a6
  232.     Bsr    WaitBlitter
  233.     Move.l    a4,$Dff050
  234.     Move.l    a5,$Dff04c
  235.     Move.l    a6,$Dff048
  236.     Move.l    d2,$Dff054
  237.     Move.w    #(Lines*64)+1,$Dff058
  238.     Sub.l    #6,d3
  239.     Add.l    #4,d2
  240.     Move.l    a6,-(sp)
  241.     Lea    XCount(pc),a6
  242.     Add.w    #1,(a6)
  243.     Move.w    (a6),d0
  244.     Move.l    (sp)+,a6
  245.     Cmp.w    #$2d,d0
  246.     Bne    CheckSine1
  247.     Bsr    WaitBlitter
  248.     Rts    
  249.     
  250. WaitBlitter    Btst    #14,$Dff002
  251.     Bne    WaitBlitter
  252.     Rts
  253.  
  254. ColTabData    = $c0000
  255.     
  256. MakeColourTab    Lea    ColVarData,a2
  257.     Lea    ColVarData+4,a3
  258.     Lea    ColVarData+8,a4
  259.     Lea    ColTabData,a5
  260.     Lea    ColTabData,a6
  261.     Moveq.l    #0,d0
  262.     Add.w    (a2),d0
  263.     Lsl.l    #1,d0
  264.     Add.l    d0,(a2)
  265.     Move.l    #15,ColCount1
  266.     Move.l    #0,ColCount2
  267. MakeColData    Move.l    a5,a6
  268.     Move.l    (a2),d0
  269.     Lsl.l    #1,d0
  270.     Add.l    d0,a6
  271.     Move.l    (a3),d0
  272.     Lsl.l    #3,d0
  273.     Move.l    d0,a0
  274.     Add.l    a6,a0
  275.     Move.l    (a4),d0
  276.     Move.l    12(a4),d1
  277.     And.l    ColCount1,d0
  278.     And.l    ColCount1,d1
  279.     Move.l    (a3),d4
  280.     Move.l    12(a3),d3
  281.     Sub.l    d4,d3
  282.     Move.l    #8,d2
  283.     Bsr    CalcData
  284.     Add.l    #12,a2
  285.     Add.l    #12,a3
  286.     Add.l    #12,a4
  287.     Cmp.l    #$258,(a3)
  288.     Beq    FoundTab
  289.     Bra    MakeColData
  290.  
  291. FoundTab    Lea    ColVarData,a2
  292.     Lea    ColVarData+4,a3
  293.     Lea    ColVarData+8,a4
  294.     Move.l    ColCount1,d5
  295.     Lsl.l    #4,d5
  296.     Move.l    d5,ColCount1
  297.     Add.l    #2,a5
  298.     Add.l    #1,ColCount2
  299.     Cmp.l    #3,ColCount2
  300.     Bne    MakeColData
  301.     Rts    
  302.  
  303. CalcData    Move.l    #0,TabVar1
  304.     Move.l    #0,TabVar2
  305.     Move.l    #8,TabVar3
  306.     Move.l    #0,TabVar4
  307.     Move.l    d3,TabVar8
  308. MakeLoop1    Move.l    a0,a1
  309.     Move.l    d0,d4
  310.     Move.l    TabVar3,d7
  311.     Lsr.l    d7,d4
  312.     And.l    #15,d4
  313.     Move.l    d4,TabVar5
  314.     Move.l    d1,d5
  315.     Move.l    TabVar3,d7
  316.     Lsr.l    d7,d5
  317.     And.l    #15,d5
  318.     Move.l    d5,TabVar6
  319.     Sub.l    d4,d5
  320.     Bmi    ColMake3
  321.     Bne    ColMake2
  322.     Sub.l    #1,d5
  323. ColMake2    Move.l    #1,TabVar4
  324.     Move.l    d5,d4
  325.     Add.l    #1,d4
  326.     Bra.s    ColMake4
  327.  
  328. ColMake3    Move.l    #-1,TabVar4
  329.     Move.l    #0,d7
  330.     Sub.l    d5,d7
  331.     Move.l    d7,d4
  332.     Add.l    #1,d4
  333. ColMake4    Divu    d3,d4
  334.     Move.l    #0,TabVar1
  335.     Move.w    d4,TabVar1+2
  336.     Swap    d4
  337.     Move.w    d4,TabVar2+2
  338.     Move.l    TabVar6,d7
  339.     Cmp.l    TabVar5,d7
  340.     Bhi    ColMake5
  341.     Move.l    TabVar5,d7
  342.     Move.l    TabVar6,d6
  343.     Move.l    d7,TabVar6
  344.     Move.l    d6,TabVar5
  345.     Move.l    TabVar8,d4
  346.     Sub.l    #1,d4
  347.     Bra.s    ColMake6
  348.  
  349. ColMake5    Moveq.l    #0,d4
  350. ColMake6    Bsr    LastColCalc
  351.     Add.l    TabVar4,d4
  352.     Add.l    TabVar5,d5
  353.     Move.w    (a1),d7
  354.     Lsl.w    #4,d7
  355.     Or.w    d5,d7
  356.     Move.w    d7,(a1)
  357.     Add.l    d2,a1
  358.     Add.l    #1,TabVar7
  359.     Move.l    TabVar8,d6
  360.     Cmp.l    TabVar7,d6
  361.     Bne    ColMake6
  362.     Move.l    #0,TabVar7
  363.     Sub.l    #4,TabVar3
  364.     Cmp.l    #-4,TabVar3
  365.     Bne    MakeLoop1
  366.     Move.l    #8,TabVar3
  367.     Rts    
  368.  
  369. LastColCalc    Move.l    TabVar1,d5
  370.     Mulu    d4,d5
  371.     Move.l    TabVar2,d7
  372.     Mulu    d4,d7
  373.     Divu    d3,d7
  374.     Add.w    d7,d5
  375.     Rts    
  376.  
  377. VBL    Move.l    $Dff004,d0
  378.     And.l    #$1ff00,d0
  379.     Cmp.l    #$13000,d0
  380.     Bne    VBL
  381.     Rts
  382.  
  383. KillSys    Bsr.s    SysWait    
  384.  
  385.     Move.l    $4,a6    
  386.     Lea    GFXName(pc),a1    
  387.     Moveq    #0,d0    
  388.     Jsr    -552(a6)    
  389.         
  390.     Lea    OldCop1(pc),a5
  391.     Move.l    $26(a0),$0(a5)    
  392.     Move.l    $32(a0),$4(a5)    
  393.     
  394.     Lea    HardWare,a6
  395.     Move.w    IntEnaR(a6),d0    
  396.     Move.w    DMAConR(a6),d1  
  397.     Or.w    #$8000,d0    
  398.     And.w    #$03ff,d1    
  399.     Or.w    #$8000,d1    
  400.     Move.w    d0,$8(a5)    
  401.     Move.w    d1,$a(a5)    
  402.     
  403.     Move.w    #$7fff,IntEna(a6) 
  404.     Move.w    #$7fff,DMACon(a6) 
  405.     Rts
  406.  
  407. SysWait    Move.w    #15,d7    
  408. SysWaitLoop    Move.l    #$05000,d1    
  409.     Bsr.s    WaitVBL    
  410.     Bsr.s    DoWaitVBL    
  411.     Dbf    d7,SysWaitLoop    
  412.     Rts
  413.  
  414. DoWaitVBL    Move.l    #$03000,d1    
  415. WaitVBL    Movem.l    d0-d1/a6,-(sp)    
  416.     Lea    HardWare,a6    
  417. WaitVBLLoop    Move.l    VPosR(a6),d0    
  418.     And.l    #$1ff00,d0    
  419.     Cmp.l    d1,d0    
  420.     Bne.s    WaitVBLLoop    
  421.     Movem.l    (sp)+,d0-d1/a6    
  422.     Rts        
  423.  
  424. ReturnSys    Lea    HardWare,a6    
  425.     Move.w    OldIntEna(pc),IntEna(a6)
  426.     Move.w    OldDMACon(pc),DMACon(a6)
  427.     Move.l    OldCop1(pc),Cop1lc(a6)
  428.     Move.l    OldCop2(pc),Cop2lc(a6)
  429.     Rts
  430.  
  431. GFXName    Dc.b    "graphics.library",0
  432.     Even
  433. OldCop1    Dc.l    0    
  434. OldCop2    Dc.l    0    
  435. OldIntEna    Dc.w    0    
  436. OldDmaCon    Dc.w    0    
  437. Screen    Dc.l    $c0000    
  438.  
  439. XCount    Dc.w    0
  440.  
  441. WobbleSine0    Dc.l    1
  442. WobbleSine1    Dc.l    8
  443. WobbleSine2    Dc.l    2
  444. WobbleSine3    Dc.l    3
  445.  
  446. WobbleSine0Pt    Dc.l    PlasmaSine
  447. WobbleSine1Pt    Dc.l    PlasmaSine
  448.  
  449. CopperPt    Dc.l    CopperList0
  450. CopperPt1    Dc.l    CopperList1
  451.  
  452. PlasmaSine0    Dc.l    $14
  453. PlasmaSine1    Dc.l    $36
  454. PlasmaSine2    Dc.l    $10
  455. PlasmaSine3    Dc.l    $23
  456. PlasmaSine4    Dc.l    $12
  457. PlasmaSine5    Dc.l    $8
  458. PlasmaSine6    Dc.l    $22
  459. PlasmaSine7    Dc.l    $33
  460.  
  461. PlasmaSine0Pt    Dc.l    PlasmaSine+$100
  462. PlasmaSine1Pt    Dc.l    PlasmaSine+$100
  463. PlasmaSine2Pt    Dc.l    PlasmaSine+$100
  464. PlasmaSine3Pt    Dc.l    PlasmaSine+$100
  465.  
  466. TabVar1    Dc.l    0
  467. TabVar2    Dc.l    0
  468. TabVar3    Dc.l    0
  469. TabVar4    Dc.l    0
  470. TabVar5    Dc.l    0
  471. TabVar6    Dc.l    0
  472. TabVar7    Dc.l    0
  473. TabVar8    Dc.l    0
  474.  
  475. ColVarData    Incbin    SysData/ColDataVars2
  476. ColVar1    Dc.l    0
  477. ColVar2    Dc.l    0
  478. ColVar3    Dc.l    0
  479.  
  480. ColCount1    Dc.l    0
  481. ColCount2    Dc.l    0
  482.  
  483. Cmv    Macro
  484.     Dc.w    \2,\1
  485.     EndM
  486.     
  487. Cwt    Macro
  488.     Dc.w    (\1*$100)+$01,$fffe
  489.     EndM    
  490.  
  491. Pal    Macro
  492.     Dc.w    $ffe1,$fffe
  493.     EndM    
  494.  
  495. EndCop    Macro
  496.     Dc.w    $ffff,$fffe
  497.     EndM    
  498.  
  499. PlasmaSine    Incbin    SysData/Sine1.Data
  500.  
  501.  
  502. ****Custom Chip Registers****
  503.  
  504. Hardware    = $Dff000
  505.  
  506. ;Control Registers
  507.  
  508. Dmaconr    = $002
  509. Vposr    = $004
  510. Vhposr    = $006
  511. Joy0dat    = $00A
  512. Joy1dat    = $00C
  513. Clxdat    = $00E
  514. Intenar    = $01C
  515. Intereqr    = $01E
  516. Copcon    = $02E
  517.  
  518. ;Blitter Registers
  519.  
  520. Bltcon0    = $040
  521. Bltcon1    = $042
  522. Bltafwm    = $044
  523. Bltalwm    = $046
  524. Bltcpth    = $048
  525. Bltcptl    = $04A
  526. Bltbpth    = $04C
  527. Bltbptl    = $04E
  528. Bltapth    = $050
  529. Bltaptl    = $052
  530. Bltdpth    = $054
  531. Bltdptl    = $056
  532. Bltsize    = $058
  533. Bltcmod    = $060
  534. Bltbmod    = $062
  535. Bltamod    = $064
  536. Bltdmod    = $066
  537. Bltcdat    = $070
  538. Bltbdat    = $072
  539. Bltadat    = $074
  540.  
  541. ;Copper Registers
  542.  
  543. Cop1lc    = $080
  544. Cop1lch    = $080
  545. Cop1lcl    = $082
  546. Cop2lc    = $084
  547. Cop2lch    = $084
  548. Cop2lcl    = $086
  549. Copjmp1    = $088
  550. Copjmp2    = $08A
  551. Diwstrt    = $08E
  552. Diwstop    = $090
  553. Ddfstrt    = $092
  554. Ddfstop    = $094
  555. Dmacon    = $096
  556. Clxcon    = $098
  557. Intena    = $09A
  558. Intreq    = $09C
  559.  
  560. ;BitPlane Registers 
  561.  
  562. BplCon0    = $100
  563. BplCon1    = $102
  564. BplCon2    = $104
  565. BplMod1    = $108
  566. BplMod2    = $10a
  567.  
  568. BplPt0h    = $0e0
  569. BplPt0l    = $0e2
  570. BplPt1h    = $0e4
  571. BplPt1l    = $0e6
  572. BplPt2h    = $0e8
  573. BplPt2l    = $0ea
  574. BplPt3h    = $0ec
  575. BplPt3l    = $0ee
  576. BplPt4h    = $0f0
  577. BplPt4l    = $0f2
  578. BplPt5h    = $0f4
  579. BplPt5l    = $0f6
  580.  
  581. ;Colour Registers
  582.  
  583. Color00    = $180
  584. Color01    = $182
  585. Color02    = $184
  586. Color03    = $186
  587. Color04    = $188
  588. Color05    = $18a
  589. Color06    = $18c
  590. Color07    = $18e
  591. Color08    = $190
  592. Color09    = $192
  593. Color10    = $194
  594. Color11    = $196
  595. Color12    = $198
  596. Color13     = $19a
  597. Color14     = $19c
  598. Color15     = $19e
  599. Color16     = $1a0
  600. Color17     = $1a2
  601. Color18     = $1a4
  602. Color19     = $1a6
  603. Color20     = $1a8
  604. Color21     = $1aa
  605. Color22     = $1ac
  606. Color23     = $1ae
  607. Color24     = $1b0
  608. Color25     = $1b2
  609. Color26     = $1b4
  610. Color27     = $1b6
  611. Color28     = $1b8
  612. Color29     = $1ba
  613. Color30     = $1bc
  614. Color31     = $1be
  615.  
  616. EcsNop    = $1fe
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.